package br.com.mftc.efitness.basicas;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Transient;
@NamedQueries({ 
	@NamedQuery(name = "PerfilDeUsuario.consultarPorNome", query = "SELECT perfil FROM PerfilDeUsuario perfil WHERE perfil.nome LIKE :NOME")
})
@Entity
@Table(name = "perfis_de_usuario")
public class PerfilDeUsuario extends ObjetoGeral implements Serializable {

	private static final long serialVersionUID = 5864581675100668907L;

	@Transient
	public static final int TAMANHO_MAX_NOME_PERFIL = 100, TAMANHO_MAX_DESCRICAO_PERFIL = 230;

	@Column(nullable = false, length = TAMANHO_MAX_NOME_PERFIL)
	private String nome;

	@Column(nullable = true, length = TAMANHO_MAX_DESCRICAO_PERFIL)
	private String descricao;

	@ManyToMany(fetch = FetchType.EAGER)
	@JoinTable(name = "permissoes_de_perfis_de_usuario", joinColumns = { @JoinColumn(name = "perfil") }, inverseJoinColumns = { @JoinColumn(name = "permissao") })
	private List<Permissao> permissoes;

	public PerfilDeUsuario() {
		super();
	}

	public PerfilDeUsuario(String nome) {
		super();

		this.nome = nome;
	}

	public PerfilDeUsuario(String nome, String descricao) {
		super();

		this.nome = nome;
		this.descricao = descricao;
	}
	
	public PerfilDeUsuario(String nome, String descricao, List<Permissao> permissoes) {
		super();

		this.nome = nome;
		this.descricao = descricao;
		this.permissoes = permissoes;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	public List<Permissao> getPermissoes() {
		return permissoes;
	}

	public void setPermissoes(List<Permissao> permissoes) {
		this.permissoes = permissoes;
	}
}
